package dao.impl;

import dao.VisitaDAO;
import excecao.ObjetoDuplicadoException;
import excecao.ObjetoNaoEncontradoException;
import java.util.ArrayList;
import java.util.List;
import modelo.Visita;

public class MemoryVisitaDAO implements VisitaDAO {

    // Banco
    private ArrayList<Visita> lista;
    private long seq;

    public MemoryVisitaDAO() {
        lista = new ArrayList<Visita>();
        seq = 0;
    }

    public void inclui(Visita umaVisita) throws ObjetoDuplicadoException {

        for (Visita visita : lista) {
            if (visita.igual(umaVisita)) {
                throw new ObjetoDuplicadoException();
            }
        }
        umaVisita.setId(++seq);
        lista.add(umaVisita);
    }

    public void altera(Visita umaVisita) throws ObjetoNaoEncontradoException {	
        boolean achou = false;

        for (Visita visita : lista) {
            if (visita.igual(umaVisita)) {
                umaVisita.setId(visita.getId());
                lista.remove(visita);
                lista.add(umaVisita);
                achou = true;
                break;
            }
        }

        if (!achou) {
            throw new ObjetoNaoEncontradoException();
        }

    }

    public void exclui(Visita umaVisita) throws ObjetoNaoEncontradoException {

        if (!lista.remove(umaVisita)) {
            throw new ObjetoNaoEncontradoException();
        }

    }

    public Visita recuperaUmaVisita(Visita umaVisita)
            throws ObjetoNaoEncontradoException {

        for (Visita visita : lista) {
            if (visita.igual(umaVisita)) {
                return visita;
            }
        }


        throw new ObjetoNaoEncontradoException();
    }

    public List<Visita> recuperaVisitas() {

        return lista;

    }
}
